// AlwaysOnTopPet.h: interface for the CAlwaysOnTopPet class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ALWAYSONTOPPET_H__A69EBAA4_385D_11D2_9FF9_00001C192944__INCLUDED_)
#define AFX_ALWAYSONTOPPET_H__A69EBAA4_385D_11D2_9FF9_00001C192944__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "Pet.h"

class CAlwaysOnTopPet : virtual public CPet {
public:
	virtual void MoveTo(int nNewX, int nNewY);
	virtual void SetImage(int nImage);
	virtual void SetImageAndMoveTo(int nImage, int nNewX, int nNewY);
	virtual void SetImages(HICON* hIconTable, int nIcons);
	CAlwaysOnTopPet();
	virtual ~CAlwaysOnTopPet();

	virtual void DrawOnTarget(int x, int y, HICON hIcon);

	//virtual callback functions - these can all be overridden to perform different actions
	//depending on the various mouse clicks. Note: CAlwaysOnTopPet::OnLButtonDown() handles
	//the dragging - if this is overridden, OnLButtonUp is not called.

	virtual void OnLButtonDown();   //implementation is in .cpp file
	virtual void OnLButtonUp()      {};
	virtual void OnLButtonDblClk()  {};
	virtual void OnMButtonDown()    {};
	virtual void OnMButtonUp()      {};
	virtual void OnMButtonDblClk()  {};
	virtual void OnRButtonDown()    {};
	virtual void OnRButtonUp()      {};
	virtual void OnRButtonDblClk()  {};

	//class information functions
	inline BOOL IsDragging() { return m_fBeingDragged; };

protected:
	HWND m_hWndOnTop;
	BOOL m_fBeingDragged;
	HRGN IconMaskToRegion(HICON hIcon);
	virtual void DestroyImages();
	HRGN* m_hRgns;
	virtual void Erase();
	virtual void Draw(int nImage);

private:
	void BuildRegions();
	void DestroyRegions();
	static BOOL m_fRegisteredClass;

	friend
		LRESULT CALLBACK WndProc_OnTop(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);


};

#endif // !defined(AFX_ALWAYSONTOPPET_H__A69EBAA4_385D_11D2_9FF9_00001C192944__INCLUDED_)
